# -*- coding: utf-8 -*-
# @Time    : 2021/4/15 16:38
# @Author  : lilehao
# @Email   : 2811894942@qq.com
# @File    : 阶段作业.py

#1、密码验证
# 用户密码复杂度验证(封装成函数)
# 长度超过8位（必须)
# 包括大、小写字母.数字.其它符号,以上四种至少三种
# 不能有长度超过或等于3的子串重复
# 密码的评分等级，默认2分，以上条件满足一条加1分
# 返回密码的评分等级，及要改进的点:
# 如return 3,['长度小于8'，'密码没有由3种以上字符组成'"]


# #2、列表去重并从大到小排序
# lst = [1,2,3,4,5,6,6,8,9,56,824,412,824]
# se = list(set(lst))
# sorted(se,reverse=True)
# print(se)
#
# #3、如何在一个函数内部修改全局变量
# 变量前添加global

#4、如何跨模块共享全局变量
# 定义跨模块全局变量__global__

#5、python数据类型有哪些
# 整型、浮点型、布尔型、字符串类型，元组、列表、字典、集合和布尔类型

#6、python中生成随机整数（1-10），随机小数（1-10），0-1之间小数的方法
# import random
# print(random.randint(1,10))
# print(random.uniform(1,10))
# print(random.random())

#7、python2与python3 的区别
# python2是地板除，Python3不是
# 模块中的python2需要添加__init__.py,python3可加可不加
# 输入输出，python2 print可不用括号，input默认是int，字符串需要引号包裹；Python3需要括号，input默认是str
# 编码：Python2是ascii码，Python3 是utf-8
# 字符串拼接，python3可以用f标志位拼接
# python2 bool类型True和False没有定义成关键字，Python3中定义了

#8、python中哪些是可变数据类型，哪些是不可变数据类型，为什么
# 可变类型：列表，字典，集合
# 不可变类型：数字类型，字符串，元组，布尔

#9、统计字符串中每个单词出现的次数
# st = "Today is sunday,it is rainy"
# words = st.split()
# for word in words:
#     print(f'{word}出现次数: {words.count(word)}')

#10、给定一个字符串，找到字符串中第一个重复的字符
# def match_char(s):
#     ls = []
#     for i in s:
#         if i not in ls:
#             ls.append(i)
#         else:
#             return i
#
# msg = "wgebrtcxgrew"
# print(match_char(msg))

#11、设么是pep8
# 是一种pyhton的一种编码规范
# 其主要内容包括代码编排、文档编排、空格的使用、注释、文档描述、命名规范、编码建议等

#12、python里如何赋值，深拷贝与浅拷贝的区别
# 引用赋值
# 深拷贝：对所有的数据进行拷贝
# 浅拷贝：只对元素的最外层进行拷贝，当被拷贝的元素是可变数据类型时，是赋值拷贝，其id值不一样，
#        当被拷贝的元素是不可变数据类型时，是引用赋值，指向听一个引用，id值相同。
#        重新分配一块内存，创建一个新的对象，但里面的元素是原对象中各个子对象的引用。

#13、简述python的内存管理机制
# 分别是 引用计数机制，垃圾回收机制，内存池机制
# 引用计数机制：有个ob_ref字段,用来记录对象的引用计数，当有新的变量指向对象时，引用计数+1
# 引用失效时，ob_ref引用计数-1，
# 最主要的问题是不能解决循环引用
# 垃圾回收机制： 当引用计数为0时，可以被垃圾回收，三种情况会触发，调用gc.collect(),GC达到阈值时，程序退出时。
# 内存池机制：小内存使用内存池进行分配，[-5,256]的整数
#          大内存使用malloc进行分配
# 只含有字母数字的字符串自动触发缓存机制，使用字符串的intern机制

#14、使用python实现冒泡排序
# a = [22, 7, 1, 3, 5, 98, 56]
# for i in range(1,len(a)):
#
#     for j in range(0,len(a) - i ):
#         if a[j] > a[j + 1]:
#             a[j], a[j + 1] = a[j + 1], a[j]
# print("===")
# print(a)

#15、使用python实现快速排序
# def quick_sort(list1):
#     if len(list1) < 2:
#         return list1
#     left, right = [], []
#     min = list1[len(list1)//2]
#     list1.remove(min)
#     for i in list1:
#         if i <= min:
#             left.append(i)
#         else:
#             right.append(i)
#     return quick_sort(left)+[min]+quick_sort(right)
#
# list1 = [68767,4,3,6,24,6,34,7,2,56,235,8,2,-5,231]
# qs = quick_sort(list1)
# print(qs)

#16、输出九九乘法表
# for i in range(1,10):
#     for j in range(1,i+1):
#         print(f"{i}*{j}={i*j}",end="")
#     print()

#17、重复接受用户的数据，如果是正整数就输出结果，否则一直输入
# while True:
#     try:
#         num = input("请输入一个正整数:")
#         if int(num)>0:
#             print(f"{num}是一个正整数")
#             break
#         else:
#             print("请重新输入")
#     except ValueError:
#         print("请输入一个正整数！")

#18、有两个列表[11,-3,4,5,2,1,8] , [9,3,4,2,6,-10] 把它们合并成一个列表，并且从小到大排序
# list1 = [11,-3,4,5,2,1,8]
# list2 = [9,3,4,2,6,-10]
# print(sorted(list1+list2))

#19、a+=1 与 a=a+1 有什么区别
# 对于可变对象，a += 1 直接在原内存地址上操作a = a + 1开辟新的内存操作
# 对于不可变对象，a += 1和a = a + 1都是在新开辟的空间操作